package com.ttdevs.app;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;

/**
 * 判断网络状态
 * 
 * @author ttdevs 2014年2月25日
 * 
 */
public class AppNetStatus {

	private static ConnectivityManager cm;

	private static boolean isNetAvailable = false;

	private AppNetStatus() {

	}

	/**
	 * 接收系统广播写入的一个网络状态
	 * 
	 * @return
	 */
	public static boolean isNetAvailable() {
		return isNetAvailable;
	}

	static void setNetAvailable(boolean isNetAvailable) {
		AppNetStatus.isNetAvailable = isNetAvailable;
	}

	static void init(Context context) {
		cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
		if (cm != null) {
			isNetAvailable = isNetworkAvailable();
		}
	}

	/**
	 * 当前网络状态是否可用，通过计算得来
	 * 
	 * @return wifi或者手机网络有一个可用
	 */
	public static boolean isNetworkAvailable() {
		if (cm != null) {
			NetworkInfo[] info = cm.getAllNetworkInfo();
			if (info != null) {
				for (int i = 0; i < info.length; i++) {
					if (info[i].getState() == NetworkInfo.State.CONNECTED) {
						System.out.println("可用网络:" + info[i].getTypeName());
						return true;
					}
				}
			}
		}
		return false;
	}

	/**
	 * 当前WIFI是否可用
	 * 
	 * @return
	 */
	public static boolean isWIFIAvailable() {
		if (cm != null) {
			return cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
		}
		return false;
	}

	/**
	 * 当前手机网络是否可用
	 * 
	 * @return
	 */
	public static boolean isMobileAvailable() {
		if (cm != null) {
			return cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
		}
		return false;
	}

	/**
	 * 判断当前某个网络的状态<br>
	 * 
	 * @param type
	 * <br>
	 *            {@link ConnectivityManager.TYPE_MOBILE }<br>
	 *            {@link ConnectivityManager.TYPE_WIFI }
	 * @return
	 */
	public static State getStatus(int type) {
		if (cm != null) {
			return cm.getNetworkInfo(type).getState();
		}
		return null;
	}

}
